package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceCode;
import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.AlbumMapper;
import cn.tedu.csmall.product.mapper.PictureMapper;
import cn.tedu.csmall.product.pojo.dto.PictureAddNewDTO;
import cn.tedu.csmall.product.pojo.entity.Picture;
import cn.tedu.csmall.product.pojo.vo.AlbumStandardVO;
import cn.tedu.csmall.product.pojo.vo.PictureStandardVO;
import cn.tedu.csmall.product.service.IPictureService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.Serializable;

@Service
@Slf4j
public class PictureServiceImpl implements IPictureService {
    @Autowired
    private AlbumMapper albumMapper;
    @Autowired
    private PictureMapper pictureMapper;
    @Override
    public void addNew(PictureAddNewDTO pictureAddNewDTO) {
        //业务规则相册必须存在
        //从图片数据中获取相册id
        //调用相册mapper中的查询详情方法
        //判断该相册是否存在
        //如果不存在则 不能添加 抛出异常
        Long albumId = pictureAddNewDTO.getAlbumId();
        AlbumStandardVO standardById = albumMapper.getStandardById(albumId);
        log.debug("相册详情:{}",standardById);
        if (standardById==null){
            String message = "添加图片失败,该相册不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }


        //创建图片对象
        //封装DTO中的数据
        //调用图片mapper中的插入数据方法
        //判断生效的行数是否不等于1
        //是 抛出异常
        Picture picture = new Picture();
        BeanUtils.copyProperties(pictureAddNewDTO,picture);
        log.debug("即将插入的图片数据:{}",picture);
        int rows = pictureMapper.insert(picture);
        if (rows!=1){
            String message = "添加图片失败,服务器忙,请稍后重试!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_INSERT,message);
        }


    }

    @Override
    public void delete(Long id) {
        //根据id删除图片,业务规则图片数据必须存在
        //调用图片mapper的根据id查询详情方法
        //判断是否存在
        //如果不存在 抛出异常
        PictureStandardVO standardById = pictureMapper.getStandardById(id);
        if (standardById==null){
            String message = "删除图片失败,该图片不存在!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        //如果存在 调用图片mapper中的根据id删除方法
        //判断生效的行数
        //如果生效的行数不等于1 则代表删除失败 抛出异常
        int rows = pictureMapper.deleteById(id);
        if (rows!=1){
            String message = "删除图片失败,服务器忙,请稍后重试!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_DELETE,message);
        }
    }
}
